home *** CD-ROM | disk | FTP | other *** search
/ Scene 96 / Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso / misc / coding / pump_src / setup / gfx.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-11-09  |  2.1 KB  |  108 lines

  1. {$A+,B-,D+,E-,F-,G+,I-,L+,N-,O-,R-,S-,V-,X+}
  2. UNIT Gfx;
  3.  
  4.    (* Copyright by Jare/Iguana in 1993, but given to the public domain. *)
  5.    (* Want more comments? Write'em!                                     *)
  6.  
  7.    (*   Several useful VGA routines.                                    *)
  8.  
  9.  
  10. INTERFACE
  11.  
  12. USES Dos;
  13.  
  14. VAR
  15.    r : Registers;
  16.    ScreenB: ARRAY [0..63999] OF BYTE ABSOLUTE $A000:0;
  17.    ScreenW: ARRAY [0..31999] OF WORD ABSOLUTE $A000:0;
  18.  
  19.  
  20. FUNCTION GetKey: WORD;
  21.  
  22. FUNCTION TestKey: BOOLEAN;
  23.  
  24. PROCEDURE SetKeyRate(delay: BYTE; rep: BYTE);
  25.  
  26. PROCEDURE VSync;
  27.  
  28. PROCEDURE WaitForRetrace;
  29.  
  30. PROCEDURE WaitForDisplay;
  31.  
  32. PROCEDURE SetScrStart(s : WORD);
  33.  
  34. PROCEDURE SetLineCompare(l : WORD);
  35.  
  36. PROCEDURE PresetRowScan(s : BYTE);
  37.  
  38.  
  39.    (* ========================================= *)
  40.  
  41. IMPLEMENTATION
  42.  
  43. FUNCTION GetKey: WORD;
  44.   BEGIN
  45.      r.AH := 0;
  46.      Intr($16, r);
  47.      GetKey := r.AX
  48.   END;
  49.  
  50. FUNCTION TestKey: BOOLEAN;
  51.   BEGIN
  52.      r.AH := 1;
  53.      Intr($16, r);
  54.      TestKey := (r.Flags AND FZero) = 0
  55.   END;
  56.  
  57. PROCEDURE SetKeyRate(delay: BYTE; rep: BYTE);ASSEMBLER;
  58.   ASM
  59.      MOV  AX,0305h
  60.      MOV  BH,delay
  61.      MOV  BL,rep
  62.      INT  16h
  63.   END;
  64.  
  65. PROCEDURE VSync;
  66.   BEGIN
  67.      WHILE (Port[$3DA] AND 8) =  8 DO;
  68.      WHILE (Port[$3DA] AND 8) <> 8 DO;
  69.   END;
  70.  
  71. PROCEDURE WaitForRetrace;
  72.   BEGIN
  73.      WHILE (Port[$3DA] AND 8) <> 8 DO;
  74.   END;
  75.  
  76. PROCEDURE WaitForDisplay;
  77.   BEGIN
  78.      WHILE (Port[$3DA] AND 8) =  8 DO;
  79.   END;
  80.  
  81. PROCEDURE SetScrStart(s : WORD);
  82.   BEGIN
  83.      ASM
  84.         CLI
  85.      END;
  86.      Port[$3d4] := $c; Port[$3d5] := HI(s);
  87.      Port[$3d4] := $d; Port[$3d5] := LO(s);
  88.      ASM
  89.         STI
  90.      END
  91.   END;
  92.  
  93. PROCEDURE SetLineCompare(l : WORD);
  94.   BEGIN
  95.      Port[$3d4] := $18; Port[$3d5] := BYTE(l);
  96.      Port[$3d4] := $7;  Port[$3d5] := (Port[$3d5] AND $EF)
  97.                                       OR BYTE((l AND $100) DIV 2);
  98.      Port[$3d4] := $9;  Port[$3d5] := (Port[$3d5] AND $BF)
  99.                                       OR BYTE((l AND $200) DIV 8)
  100.   END;
  101.  
  102. PROCEDURE PresetRowScan(s : BYTE);
  103.   BEGIN
  104.      Port[$3d4] := 8; Port[$3d5] := (Port[$3d5] AND $E0) OR (s AND $0F)
  105.   END;
  106.  
  107. END.
  108.